import axios from 'axios';
import qs from 'querystring';
import NProgress from 'nprogress';
import store from  '../redux/store';
import { createDeleteUserInfoAction } from '../redux/action_creators/login_action';
import 'nprogress/nprogress.css';

const instance = axios.create({
    timeout: 48000,
    // headers: { 'X-Requested-With' : 'XMLHttpRequest' }
})

// 请求拦截器
instance.interceptors.request.use(
    (config) => {
        // 进度条
        NProgress.start()
        // 从redux中获取method的请求头
        const {token} = store.getState().userInfo
        // 向请求头中添加token,用于校验身份
        if(token) config.headers.token = token
        const { method,data } = config
        if(method.toLowerCase === 'post'){
            // 若传递过来的参数是对象
            if(data instanceof Object){
                config.data = qs.stringify(data)
            }
        }
        return config;
    }, 
    (error)=> {
        return Promise.reject(error);
    }
);

// 响应拦截器
instance.interceptors.response.use(
    (response) => {// 请求成功
        NProgress.done()
        const {data} = response
        if(data.code === 200 ){
            return response.data;
        }else if(data.code === 401){
            // message.error('身份验证失败，请重新登录！',1)
            // 分发一个删除用户信息的action
            store.dispatch(createDeleteUserInfoAction())
            return response.data;
        }else{
            return response.data;
        }

    }, 
    (error) => {// 请求失败，提示错误
        NProgress.done();       
        if(error.message==="Request failed with status code 500"){
            console.log('服务器没有启动！');
            return {code:500,msg:'服务器异常'};
        }
        if(error.message==="Request failed with status code 404"){
            console.log('服务器请求错误，没有找到请求接口！');
            return {code:404,msg:'服务器异常'};
        }
        // 中断promise链
        return {code:404,msg:'服务器异常'};  //返回的状态是错误的，返回的状态值是空
        // return Promise.reject(error);
    }
);

export default instance;
